package com.gradumate.client.gui.formulier;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CaptionPanel;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import com.gradumate.client.Element;
import com.gradumate.shared.Gebruiker;

/**
 * 
 * @author IJsbrand
 *
 */
public class TabStudentgegevens {
	
	private AfstudeerVoorstelIndienen tp;
	private Gebruiker gebruiker;
	private Element e = new Element();
	
	private CheckBox chckbxStudentgegevens;
	private int row;
	private String errormsg;
	public DialogBox dialboxSysteemcontrole;
	
	public TabStudentgegevens(AfstudeerVoorstelIndienen tp, Gebruiker gebruiker) {
		this.tp = tp;
		this.gebruiker = gebruiker;
	}
	
	/**
	 * Deze methode bevat alles wat te maken heeft met de tab Student gegevens: <br>
	 * - alle visuele onderdelen zoals statische labels en buttons<br>
	 * - Een aantal labels zijn dynamisch en halen de gegevens op van de huidig ingelogde gebruiker. <Br>
	 *   Dit Object gebruiker is meegegeven in de constructor.<br>
	 *   Zo zal o.a. de naam, HU emailadres en het studentnummer weergegeven worden van de ingelogde gebruiker.<Br>
	 * <br>
	 * Deze tab geeft een overzicht van jouw studentgegevens.<br>
	 * 
	 * @return De complete tab studentgegevens. Deze bestaat uit een FlexTable waarin alle widgets van de tab zitten.
	 */
	public Widget getTabStudentgegevens() {
		
		Button b2 = e.getVolgendeButton();
		b2.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				tabStudentValidatie();
				tp.changeTab(1,2);
			}
		});

		Label lblNewLabel_3 = new Label("Bij deze stap wordt er een overzicht van jou gegevens getoond die bekend zijn bij de Hogeschool Utrecht.");
		Label lblVerifieerOfDeze = new Label("Verifieer of deze gegevens kloppen. Wanneer deze gegevens kloppen klik dan op \"Ik heb deze gegevens gelezen en geferifieerd\". ");
		Label lblWanneerDezeGegevens = new Label("Wanneer deze gegevens niet kloppen klik dan op \"Melding maken van foutieve gegevens\".");

		Label label = new Label("Overzicht studentgegevens");
		label.setStyleName("vetgedrukt");

		Label label_1 = new Label("naam");
		Label label_2 = new Label("HU email");
		Label label_3 = new Label("Studentnummer");
		Label label_4 = new Label("Thema");
		Label label_5 = new Label("Opleidingsrichting");

		Label lblIjsbrandVanPrattenburg = new Label(gebruiker.getVoornaam() + " " + gebruiker.getAchternaam());
		Label lblIjsbrandvanprattenburgstudenthunl = new Label(gebruiker.getGebruikerEmail());
		Label label_6 = new Label("1581037");
		Label lblIct = new Label("ICT");
		Label lblInformatica = new Label("Informatica");

		chckbxStudentgegevens = new CheckBox("Ik heb deze gegevens gelezen en geverifieerd");

		Hyperlink hprlnkMakingBlabl = new Hyperlink("Melding maken van foutieve gegevens", false, "newHistoryToken");
		Anchor hprlnkStudentAnnuleren = new Anchor("Annuleren","https://www.sharepoint.hu.nl");
		Image img = new Image();
		img.setAltText("cancel img");
		img.setUrl("style/icon/cancel.png");

		HorizontalPanel hpAnnuleren = new HorizontalPanel();
		hpAnnuleren.add(e.getSpacer());
		hpAnnuleren.add(hprlnkStudentAnnuleren);
		hpAnnuleren.add(img);

		row = 0;
		FlexTable flxStudentHeader = new FlexTable();
		flxStudentHeader.setCellPadding(0);
		flxStudentHeader.setCellSpacing(3);

		flxStudentHeader.setWidget(row, 0,e.getAfstudeerVoorstelIndienenHeader());
		row++;
		flxStudentHeader.setWidget(row, 0, lblNewLabel_3);
		row++;
		flxStudentHeader.setWidget(row, 0, lblVerifieerOfDeze);
		row++;
		flxStudentHeader.setWidget(row, 0, lblWanneerDezeGegevens);

		row = 0;

		// Student gegevens.
		FlexTable flxStudentContent = new FlexTable();
		flxStudentContent.setCellPadding(0);
		flxStudentContent.setCellSpacing(3);

		flxStudentContent.setWidget(row, 0, label_1);
		flxStudentContent.setWidget(row, 1, lblIjsbrandVanPrattenburg);
		row++;
		flxStudentContent.setWidget(row, 0, label_2);
		flxStudentContent.setWidget(row, 1,lblIjsbrandvanprattenburgstudenthunl);
		row++;
		flxStudentContent.setWidget(row, 0, label_3);
		flxStudentContent.setWidget(row, 1, label_6);
		row++;
		flxStudentContent.setWidget(row, 0, label_4);
		flxStudentContent.setWidget(row, 1, lblIct);
		row++;
		flxStudentContent.setWidget(row, 0, label_5);
		flxStudentContent.setWidget(row, 1, lblInformatica);
		row++;
		flxStudentContent.setWidget(row, 0, e.getSpacer());
		row++;
		flxStudentContent.setWidget(row, 0, chckbxStudentgegevens);
		row++;
		flxStudentContent.setWidget(row, 0, e.getSpacer());
		row++;
		flxStudentContent.setWidget(row, 0, hprlnkMakingBlabl);

		CaptionPanel cpStudent = new CaptionPanel("Overzicht studentgegevens");
		cpStudent.add(flxStudentContent);

		row = 0;
		FlexTable flxStudentFooter = new FlexTable();
		flxStudentFooter.setCellPadding(0);
		flxStudentFooter.setCellSpacing(10);

		flxStudentFooter.setWidget(row, 0, b2);
		flxStudentFooter.setWidget(row, 1, hpAnnuleren);

		row = 0;

		FlexTable flxStudent = new FlexTable();
		flxStudent.setCellPadding(0);
		flxStudent.setCellSpacing(3);

		row++;
		flxStudent.setWidget(row, 0, flxStudentHeader);
		row++;
		flxStudent.setWidget(row, 0, cpStudent);
		row++;
		flxStudent.setWidget(row, 0, flxStudentFooter);

		return flxStudent;
	}
	
	/**
	 * Deze methode valideert of de checkbox is aangevinkt in de tab waar je je eigen gegevens te zien krijgt.<br>
	 * De boolean van dat de tab gevalideerd is wordt op true gezet. Indien niet alle gegevens correct zijn zal de boolean <br>
	 * op false gezet worden.<br>
	 */
	private void tabStudentValidatie() {
		if (!chckbxStudentgegevens.getValue()) {
			errormsg = "- Studentgegevens zijn niet geverifieerd.";
			tp.showDialogBox(errormsg, "error message");
			tp.tabStatus("TabStudentgegevens", false);
		} else {
			tp.tabStatus("TabStudentgegevens", true);
		}
		
	}
}